home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-06-28 | 2.8 KB | 142 lines | [TEXT/CWIE] |
- // MenuObject.cp
-
- #ifndef MenuObject_h
- #include "MenuObject.h"
- #endif
-
- MenuObject::MenuObject( MenuID theID, ConstPString title )
- : menu( NewMenu( theID, title ) ),
- length( CountMItems( menu ) ),
- id( theID )
- {
- Assert( menu != 0 );
- Assert( *menu != 0 );
- Assert( id != 0 );
- Assert( id == (*menu)->menuID );
- Assert( title.Length() > 0 );
- }
-
- MenuObject::MenuObject( MenuHandle theMenu )
- : menu( theMenu ),
- length( CountMItems( menu ) ),
- id( (*theMenu)->menuID )
- {
- Assert( menu != 0 );
- Assert( *menu != 0 );
- Assert( id != 0 );
- }
-
- MenuObject::MenuObject( ResourceID resource )
- : menu( GetMenu( resource ) ),
- length( CountMItems( menu ) ),
- id( (*menu)->menuID )
- {
- Assert( menu != 0 );
- Assert( *menu != 0 );
- Assert( id != 0 );
- Assert( id == resource ); // Keeping these equal avoids bugs
- // in some versions of system software
- }
-
- void MenuObject::InsertItem( uint16 index, ConstPString text )
- {
- Assert( length < maxint16 );
- Assert( index <= length );
- length++;
- InsertMenuItem( menu, "\p-", index );
- (*this)[index].SetText( text );
- // We set the text separately to avoid the meta-character mess
- }
-
- void MenuObject::AppendItem( ConstPString text )
- {
- Assert( length < maxint16 );
- length++;
- AppendMenu( menu, "\p-" );
- (*this)[ length-1 ].SetText( text );
- // We set the text separately to avoid the meta-character mess
- }
-
- void MenuObject::InsertDivider( uint16 index )
- {
- Assert( length < maxint16 );
- Assert( index <= length );
- length++;
- InsertMenuItem( menu, "\p-", index );
- }
-
- void MenuObject::AppendDivider()
- {
- Assert( length < maxint16 );
- length++;
- AppendMenu( menu, "\p-" );
- }
-
- void MenuObject::InsertResources( uint16 index, ResType type )
- {
- Assert( index <= length );
- InsertResMenu( menu, index, type );
- length = CountMItems( menu );
- }
-
- void MenuObject::AppendResources( ResType type )
- {
- AppendResMenu( menu, type );
- length = CountMItems( menu );
- }
-
- void MenuObject::DeleteItem( uint16 index )
- {
- Assert( index < length );
- DeleteMenuItem( menu, index );
- length--;
- }
-
- void MenuObject::DeleteItems( URange16 range )
- {
- Assert( range.End() <= length );
-
- for ( uint16 end = range.End(); end > range.Start(); end-- )
- DeleteMenuItem( menu, end - 1 );
-
- length -= range.Length();
- }
-
- void MenuObject::Enable()
- {
- if ( !Enabled() )
- EnableItem( menu, 0 );
- }
-
- void MenuObject::Disable()
- {
- if ( Enabled() )
- DisableItem( menu, 0 );
- }
-
- void MenuObject::EnableIfItemsEnabled()
- {
- uint32 enableFlags = (*menu)->enableFlags;
-
- if ( length < 31 )
- enableFlags &= (1L << (length+1))-1;
-
- if ( enableFlags == 1 )
- DisableItem( menu, 0 );
- else
- if ( enableFlags > 0 && (enableFlags & 1) == 0 )
- EnableItem( menu, 0 );
- }
-
- void MenuObject::EnableTail()
- {
- if ( !TailEnabled() )
- EnableItem( menu, 31 );
- }
-
- void MenuObject::DisableTail()
- {
- if ( TailEnabled() )
- DisableItem( menu, 31 );
- }
-